package cn.doit.day04

/**
我这边有一个表比如说有三个字段 大概这个样子
start  end    province
1      3      江苏
4      5      山东
要变成
id   province
1      江苏
2      江苏
3      江苏
4      山东
5      山东
 */
object _06_平均温度案例 {
  def main(args: Array[String]): Unit = {
    val d1 = List(("beijing", 28.1), ("shanghai", 28.7), ("guangzhou", 32.0), ("shenzhen", 31.0))
    val d2 = List(("beijing", 27.3), ("shanghai", 30.1), ("guangzhou", 33.3))
    val d3 = List(("beijing", 28.2), ("shanghai", 29.1), ("guangzhou", 32.0), ("shenzhen", 32.0))


    //求每一个城市的平均温度
    //每个城市的   ==》   平均温度  ==》  总温度/天数
    // 北京 ==》 28.1    27.3   28.2 =》求和    求个数

    //从数据源往我想要的东西那边去靠

    //1.将三个集合中的所有的元素放在一个集合中  List(("beijing", 28.1), ("shanghai", 28.7), ("guangzhou", 32.0), ("shenzhen", 31.0),("beijing", 27.3), ("shanghai", 30.1), ("guangzhou", 33.3),("beijing", 28.2), ("shanghai", 29.1), ("guangzhou", 32.0), ("shenzhen", 32.0))
    val days: List[(String, Double)] = d1.union(d2).union(d3)

    days.groupBy(_._1)
      .toList
      .map(tp=>{
        (tp._1,(tp._2.map(_._2).sum/tp._2.size).formatted("%.2f"))
      }).foreach(println)


    //2.将北京的放在一起，把温度都收集起来  Map((beijing,List(28.1,27.3,28.2)),shanghai,guangzhou,shenzhen...)
    /**
       (shenzhen,List((shenzhen,31.0), (shenzhen,32.0)))
       (shanghai,List((shanghai,28.7), (shanghai,30.1), (shanghai,29.1)))
       (guangzhou,List((guangzhou,32.0), (guangzhou,33.3), (guangzhou,32.0)))
       (beijing,List((beijing,28.1), (beijing,27.3), (beijing,28.2)))
     */
    val cityGrouped: Map[String, List[(String, Double)]] = days.groupBy(_._1)//Map[String,List[(String,Double)]]
    cityGrouped.toArray.map(tp=>{
      val city: String = tp._1
      //将list集合中的每一个元素(元祖)=》温度()
      val value: List[(String, Double)] = tp._2//List(28.1,27.3,28.2)
      val temps: List[Double] = value.map(_._2)
      val sum: Double = temps.sum
      (city,(sum/temps.size).formatted("%.2f"))
    }).foreach(a=>printf("平均温度是:%.2f",a._2))

    //3.每一个元素都拿过来 ==》 (beijing,List(28.1,27.3,28.2)) 总温度/天数  list中的元素求和  list的个数





  }

}
